const P = new Promise((resolve, reject)=>{
  console.log('==========promise中的同步=========')
  const num = Math.random()
  setTimeout(()=>{
    console.log('=====执行异步任务=======');
    if(num < 0.5) {
      resolve(num)
     } else {
       reject(num)
    }
  },3000)
})
console.log('=========主线程的同步任务==========')
P.then((res)=>{
    console.log('异步任务成功',res)
},(reason)=>{
    console.log('异步任务成失败',reason)
})

/* 
 Promise是一个承诺 承诺的事情不一定可以完成 但是会返回一个结果,存在三种状态， 成功失败等待
 只有resolve可以将其转换为成功
 reject以及throw 都会让其失败
 想要获取结果值，需要使用then 或者 await(只能获取成功状态的值)
 ASYNC 前缀代表这个函数科恩那个含有异步代码。返回的是一个promise值
 这个函数可以没有异步操作，异步操作的promise结果可以使用await获取.
 同样非peromise也可以使用await修饰 结果等同于没修饰 但是使用了wait会阻塞函数继续执行
 后面代码执行代表 异步任务执行完毕 已经知晓状态以及结果了
 asy 函数 会顺序执行同步代码 并且同步返回 (但是这个返回值是一个promise) 想要结果你还需要再把他放进队列
 遇见await会把后面的东西放进异步队列 继续执行其他同步代码
 都执行完才会执行这个异步任务（也可能是普通的值 await 后面不一定是promise 可能是普通值 不论是啥 都不会立即执行）
  总之： 1. 执行async中的同步 2. 遇见await 停止 返回 promise 3. 继续执行其他同步任务 4. 同步结束后 执行await后的东西
   5. 多个await 会等到一起执行





*/